home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nebula 2
/
Nebula Two.iso
/
SourceCode
/
MiniExamples
/
AppKit
/
PaginationLab
/
MyPageLayout.m
< prev
next >
Wrap
Text File
|
1995-06-12
|
4KB
|
114 lines
/* MyPageLayout.m
* Purpose: A subclass of the PageLayout panel that displays more of the
* information from NXApp's PrintInfo object. If you add an accessory
* View to the PageLayout panel, you commonly need to subclass it to
* keep your fields in sync with the user's chosen units.
*
* You may freely copy, distribute, and reuse the code in this example.
* NeXT disclaims any warranty of any kind, expressed or implied, as to its
* fitness for any particular use.
*
* Written by: Samuel Streeper
* Created: (04/April/91)
*/
#import "MyPageLayout.h"
#import "MyPrintInfo.h"
#import "BigView.h"
@implementation MyPageLayout
- (int) runModal
{
if (!p1AccessoryView)
{
// Initialization probably belongs in new, but [PageLayout new]
// does really funky stuff that breaks this...
// here we load the nib file that contains our accessory view.
// This code only gets executed once, because the nib initializes
// the p1AccessoryView outlet to a meaningful value.
[NXApp loadNibSection:"MyPageLayout.nib" owner:self withNames:NO];
[self setAccessoryView:p1AccessoryView];
}
return [super runModal];
}
- pickedUnits:sender
/*
* Called when the user selects different units (e.g. cm or inches).
* Must update the margin fields.
*/
{
float old, new;
[self convertOldFactor:&old newFactor:&new];
[[margins cellAt:0:0] setFloatValue:new * [[margins cellAt:0:0] floatValue] / old];
[[margins cellAt:1:0] setFloatValue:new * [[margins cellAt:1:0] floatValue] / old];
[[margins cellAt:2:0] setFloatValue:new * [[margins cellAt:2:0] floatValue] / old];
[[margins cellAt:3:0] setFloatValue:new * [[margins cellAt:3:0] floatValue] / old];
return [super pickedUnits:sender];
}
// When the panel comes up, read the global printInfo object and set the
// panels fields appropriately.
- readPrintInfo
{
float conversion, dummy;
NXCoord left, right, top, bottom;
id pi;
[super readPrintInfo];
pi = [NXApp printInfo];
[[centerButtons cellAt:0:0] setState:[pi isHorizCentered]];
[[centerButtons cellAt:1:0] setState:[pi isVertCentered]];
[vertButtons selectCellAt:[pi vertPagination]:0];
[horButtons selectCellAt:[pi horizPagination]:0];
[paginationButtons selectCellAt:([[NXApp printInfo] paginationMode]):0];
[[MyPageLayout new] convertOldFactor:&conversion newFactor:&dummy];
[pi getMarginLeft:&left right:&right top:&top bottom:&bottom];
[[margins cellAt:0:0] setFloatValue:left * conversion];
[[margins cellAt:1:0] setFloatValue:right * conversion];
[[margins cellAt:2:0] setFloatValue:top * conversion];
[[margins cellAt:3:0] setFloatValue:bottom * conversion];
return self;
}
// If the user hits OK, this method saves the panels settings to the
// global printInfo object.
- writePrintInfo
{
id pi;
float conversion, dummy;
[super writePrintInfo];
pi = [NXApp printInfo];
[self convertOldFactor:&conversion newFactor:&dummy];
if (conversion) {
[pi setMarginLeft:[[margins cellAt:0:0] floatValue] / conversion
right: [[margins cellAt:1:0] floatValue] / conversion
top: [[margins cellAt:2:0] floatValue] / conversion
bottom: [[margins cellAt:3:0] floatValue] / conversion];
}
[pi setHorizCentered: [[centerButtons cellAt:0:0] state]];
[pi setVertCentered: [[centerButtons cellAt:1:0] state]];
[pi setVertPagination: [vertButtons selectedRow]];
[pi setHorizPagination: [horButtons selectedRow]];
[[NXApp printInfo] setPaginationMode:([paginationButtons selectedRow])];
return self;
}
@end